package com.yuwen.yuwenRPC.registry;

/**
 * @ClassNameRegistry
 * @Description TODO
 * @Author钰玟
 * @Date2025/3/31 下午7:28
 * @Version 1.0
 **/

import com.yuwen.yuwenRPC.config.RegistryConfig;
import com.yuwen.yuwenRPC.model.ServiceMetaInfo;

import java.util.List;
import java.util.concurrent.ExecutionException;

/**
 * 服务中心
 */
public interface Registry {

    /**
     * 初始化注册中心配置
     * @param registryConfig 配置
     */
    void init(RegistryConfig registryConfig);

    /**
     * 注册服务
     * @param serviceMetaInfo 注册服务的服务元信息
     * @throws Exception 可能抛出的异常
     */
    void register(ServiceMetaInfo serviceMetaInfo) throws Exception;

    /**
     * 注销服务
     * @param serviceMetaInfo 对应服务元信息
     */
    void unRegister(ServiceMetaInfo serviceMetaInfo) throws ExecutionException, InterruptedException;

    /**
     * 服务发现
     * @param serviceKey the key service of discovery
     * @return 发现的服务元信息
     */
    List<ServiceMetaInfo> registryDiscovery(String serviceKey);

    /**
     * 销毁服务
     */
    void destroy();

    /**
     * 心跳检测
     */
    void heartBeat();

    /**
     * 监听 key的  变化
     * @param serviceNodeKey 所监听的key
     */
    void watch(String serviceNodeKey);
}
